package identify

// 识别模型控制器
var controller = NewControl()

// GetVersion 获取识别模型的版本信息
//
//	@return	模型外部版本信息
//	@return	模型内部版本信息
//	@return	异常错误
func GetVersion() (string, string, error) {
	return controller.GetVersion()
}

// Init 初始化识别模型实例句柄
//
//	@param	params	初始化参数
//	@return	错误信息
func Init(params InitParams) error {
	// 是否使用CPU
	if params.UseProcessor == ProcessorCPU {
		// 配置识别模型逻辑处理器最大数量
		if err := SetRecogMaxThreadNum(params.MaxThreadNum); err != nil {
			return err
		}
	}
	return controller.Init(params)
}

// UnInit 释放识别模型实例句柄
//
//	@return	错误信息
func UnInit() error {
	return controller.UnInit()
}

// Process 识别方法
//
//	@param	img	图像资源
//	@return	识别结果
//	@return	错误信息
func Process(img *ImageInfo) (*ProcessOutput, error) {
	return controller.Process(img)
}

// GetImageAreaData 获取识别图片
//
//	调用该接口后C管理的识别图片将会被释放
//
//	@param	img	图像信息
//	@return	识别图片资源
//	@return	错误信息
func GetImageAreaData(img *ImageInfo) ([]byte, error) {
	return controller.GetImageAreaData(img)
}

// SetRecogMaxThreadNum 配置识别模型最大线程数
//
// @params num 最大线程数数量
func SetRecogMaxThreadNum(num int) error {
	return controller.SetRecogMaxThreadNum(num)
}

// GetFeatLength 获取特征长度
//
// 注意：仅允许在模型初始化成功后调用
func GetFeatLength() (int32, error) {
	return controller.GetFeatLength()
}

// GetIsInherit 获取是否继承
//
//	注意：仅允许在模型初始化成功后调用
func GetIsInherit() (bool, error) {
	return controller.GetIsInherit()
}
